home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1997 / MacHack 1997.toast / Presentations / Presentations ’97 / Sessions ’97 / Multiplatform Code⁄Data Sharing / HelloBothWorlds / Libraries / reschain.cpp < prev    next >
Encoding:
Text File  |  1997-06-26  |  1.2 KB  |  67 lines  |  [TEXT/CWIE]

  1.  
  2. // mail <chelly@eden.com> or surf http://www.eden.com/~chelly for feedback
  3. // free source code - do whatever you like with it
  4.  
  5. // resource access for application
  6. // could be expanded to allow multiple open files and the "chaining"
  7. // as the Mac resource manager does
  8.  
  9. #include "reschain.h"
  10.  
  11. #include "resfile_flat.h"
  12. #include "stream.h"
  13.  
  14. #if TARGET_IS_MACOS
  15.  
  16. #include <Resources.h>
  17. #include "resfile_macos.h"
  18.  
  19. // put mac application resource chain in
  20. static resfile_macos s_app_resfile( CurResFile() );
  21.  
  22. #endif
  23.  
  24. static resfile* s_resfile = nil;
  25. static stream*  s_stream = nil;
  26.  
  27.  
  28. void  OpenResourceFile( const char* filename )
  29. {
  30.     assert( !s_resfile );
  31.     
  32.     // use a flat resource file
  33.     s_stream = new stream( filename );
  34.     s_resfile = new resfile_flat( s_stream );
  35. }
  36.  
  37. void CloseResourceFile()
  38. {
  39.     delete s_resfile;
  40.     s_resfile = nil;
  41.     delete s_stream;
  42.     s_stream = nil;
  43. }
  44.  
  45. void* GetResourcePtr( long type, int id )
  46. {
  47.     void* res = nil;
  48.     
  49.     // be sure file is open
  50.     if ( s_resfile )
  51.         res = s_resfile->get_resource( type, id );
  52.  
  53.     // let application resources show through on the mac
  54. #if TARGET_IS_MACOS
  55.     if ( !res )
  56.         res = s_app_resfile.get_resource( type, id );
  57. #endif
  58.  
  59.     return res;
  60. }
  61.  
  62. void  ReleaseResourcePtr( void* p )
  63. {
  64.     resfile::release_resource( p );
  65. }
  66.  
  67.